class LiczbaException extends Exception
{
	LiczbaException(String komunikat)
	{
		super(komunikat);
	}
}
public class Liczba 
{
	private int n;
	
	Liczba() throws LiczbaException{}  
	
	
	
	Liczba(int n) 
	{
		this.n=n;
	}
	
  Liczba(String n, int podstawa) throws LiczbaException 
	{
		int liczba=0;
		int l=n.length()-1;
		for (int i=l ; i>=0; i--)
			try
			{
				liczba+=pobierzWartosc(n.charAt(i),podstawa)*(int)(Math.pow((double)podstawa, (double)(l-i)));
			}
			catch (LiczbaException e)
			{
				throw e;
			}
		this.n=liczba;
	}
	
	public static int pobierzWartosc (char znak,int podstawa) throws LiczbaException
	{
		int tmp;
		switch (znak)
		{
			case '0': tmp=0; break;
			case '1': tmp=1; break;
			case '2': tmp=2; break;
			case '3': tmp=3; break;
			case '4': tmp=4; break;
			case '5': tmp=5; break;
			case '6': tmp=6; break;
			case '7': tmp=7; break;
			case '8': tmp=8; break;
			case '9': tmp=9; break;
			case 'A': tmp=10; break;
			case 'B': tmp=11; break;
			case 'C': tmp=12; break;
			case 'D': tmp=13; break;
			case 'E': tmp=14; break;
			case 'F': tmp=15; break;
			default : throw new LiczbaException("niepoprawna liczba");
		}
		if (tmp>=podstawa)
		{
			throw new LiczbaException("niepoprawna liczba");
		}
		if(podstawa<2 || podstawa>16)
			throw new LiczbaException("niepoprawna podstawa");
		return tmp;
	}
	public String odwroc (String ciag)
	{
		String tmp="";
		for (int i=ciag.length()-1; i>=0; i--)
			tmp+=ciag.charAt(i);
		return tmp;
	}
	public static char pobierzZnak(int liczba) throws LiczbaException
	{
		switch (liczba)
		{
			case 10: return 'A';
			case 11: return 'B';
			case 12: return 'C';
			case 13: return 'D';
			case 14: return 'E';
			case 15: return 'F';
			default: throw new LiczbaException("niepoprawna podstawa");
		}
		
	}
	
	public String zapis(int podstawa) throws LiczbaException 
	{
		sprawdzPodstawe(podstawa);
		if (podstawa > 16 || podstawa < 2)
			throw new LiczbaException("niepoprawna podstawa");
		String liczba="";
		int tmpLiczba = this.n;
		int znak;
		
		while (tmpLiczba>0)
		{	
			znak=tmpLiczba % podstawa;
			if (znak < 10)
				liczba += znak;
			else 
			{
				try
				{
					liczba +=pobierzZnak(znak);
				}
				catch(LiczbaException e)
				{
					throw e;
				}
			}
			tmpLiczba/=podstawa;
		}
		return odwroc(liczba);
	}
	public static boolean sprawdzPodstawe(int podstawa)
	{
		boolean check = true;
		if(podstawa<2 || podstawa>16)
		check = false;
		return check;
	}
}